# Maintenance productions for the Lisp directory
# Copyright (C) 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008,
#   2009, 2010, 2011, 2012  Free Software Foundation, Inc.

# This file is part of GNU Emacs.

# GNU Emacs is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.

# GNU Emacs is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
# GNU General Public License for more details.

# You should have received a copy of the GNU General Public License
# along with GNU Emacs.  If not, see <http://www.gnu.org/licenses/>.

SHELL = /bin/sh

lisp=@srcdir@
VPATH=@srcdir@
srcdir=@srcdir@/..

# You can specify a different executable on the make command line,
# e.g. "make EMACS=../src/emacs ...".

EMACS = ../src/emacs

# Command line flags for Emacs.  This must include --multibyte,
# otherwise some files will not compile.

EMACSOPT = -batch --no-site-file --multibyte

# Extra flags to pass to the byte compiler
BYTE_COMPILE_EXTRA_FLAGS =
# For example to not display the undefined function warnings you can use this:
# BYTE_COMPILE_EXTRA_FLAGS = --eval '(setq byte-compile-warnings (quote (not unresolved)))'
# The example above is just for developers, it should not be used by default.

lisptagsfiles1 = $(lisp)/*.el
lisptagsfiles2 = $(lisp)/*/*.el
lisptagsfiles3 = $(lisp)/*/*/*.el
lisptagsfiles4 = $(lisp)/*/*/*/*.el
ETAGS = ../lib-src/etags

# Automatically generated autoload files, apart from lisp/loaddefs.el.
# Note this includes only those files that need special rules to
# build; ie it does not need to include things created via
# generated-autoload-file (eg calc/calc-loaddefs.el).
LOADDEFS = $(lisp)/calendar/cal-loaddefs.el \
	$(lisp)/calendar/diary-loaddefs.el \
	$(lisp)/calendar/hol-loaddefs.el \
	$(lisp)/mh-e/mh-loaddefs.el

# Elisp files auto-generated.
AUTOGENEL = loaddefs.el \
	$(LOADDEFS) \
	cus-load.el \
	finder-inf.el \
	subdirs.el \
	calc/calc-loaddefs.el \
	eshell/esh-groups.el \
	cedet/semantic/loaddefs.el \
	cedet/ede/loaddefs.el \
	cedet/srecode/loaddefs.el

# Files to compile before others during a bootstrap.  This is done to
# speed up the bootstrap process.

COMPILE_FIRST = \
	$(lisp)/emacs-lisp/bytecomp.elc \
	$(lisp)/emacs-lisp/byte-opt.elc \
	$(lisp)/emacs-lisp/autoload.elc

# The actual Emacs command run in the targets below.

emacs = EMACSLOADPATH=$(lisp) LC_ALL=C $(EMACS) $(EMACSOPT)

# Common command to find subdirectories

setwins=subdirs=`(cd $$wd; find . -type d -print)`; \
	for file in $$subdirs; do \
	   case $$file in */Old | */RCS | */CVS | */CVS/* | */.* | */.*/* | */=* ) ;; \
		*) wins="$$wins $$wd/$$file" ;; \
	   esac; \
        done

# Find all subdirectories except `obsolete' and `term'.

setwins_almost=subdirs=`(cd $$wd; find . -type d -print)`; \
	for file in $$subdirs; do \
	   case $$file in */Old | */RCS | */CVS | */CVS/* | */.* | */.*/* | */=* | */obsolete | */term ) ;; \
		*) wins="$$wins $$wd/$$file" ;; \
	   esac; \
        done

# Find all subdirectories in which we might want to create subdirs.el

setwins_for_subdirs=subdirs=`(cd $$wd; find . -type d -print)`; \
	for file in $$subdirs; do \
	   case $$file in */Old | */RCS | */CVS | */CVS/* | */.* | */.*/* | */=* | */cedet* ) ;; \
		*) wins="$$wins $$wd/$$file" ;; \
	   esac; \
        done

# `compile-main' tends to be slower than `recompile' but can be parallelized
# with "make -j" and results in more deterministic compilation warnings.
# cus-load and finder-inf are not explicitly requested by anything, so
# we add them here to make sure they get built.
all: compile-main $(lisp)/cus-load.el $(lisp)/finder-inf.el
	@: Let us check that we byte-compiled all the files.
	$(MAKE) $(MFLAGS) compile-last EMACS=$(EMACS)

doit:

# custom-deps and finder-data both used to scan _all_ the *.el files.
# This could lead to problems in parallel builds if automatically
# generated *.el files (eg loaddefs etc) were being changed at the same time.
# One solution was to add autoloads as a prerequisite:
# http://lists.gnu.org/archive/html/emacs-pretest-bug/2007-01/msg00469.html
# http://lists.gnu.org/archive/html/bug-gnu-emacs/2007-12/msg00171.html
# However, this meant that running these targets modified loaddefs.el,
# every time (due to time-stamping).  Calling these rules from
# bootstrap-after would modify loaddefs after src/emacs, resulting
# in make install remaking src/emacs for no real reason:
# http://lists.gnu.org/archive/html/emacs-devel/2008-02/msg00311.html
# Nowadays these commands don't scan automatically generated files,
# since they will never contain any useful information
# (see finder-no-scan-regexp and custom-dependencies-no-scan-regexp).
$(lisp)/cus-load.el:
	$(MAKE) $(MFLAGS) custom-deps
custom-deps: doit
	wd=$(lisp); $(setwins_almost); \
	echo Directories: $$wins; \
	$(emacs) -l cus-dep --eval '(setq generated-custom-dependencies-file "$(lisp)/cus-load.el")' -f custom-make-dependencies $$wins

$(lisp)/finder-inf.el:
	$(MAKE) $(MFLAGS) finder-data
finder-data: doit
	wd=$(lisp); $(setwins_almost); \
	echo Directories: $$wins; \
	$(emacs) -l finder --eval '(setq generated-finder-keywords-file "$(lisp)/finder-inf.el")' -f finder-compile-keywords-make-dist $$wins

# The chmod +w is to handle env var CVSREAD=1.  Files named
# are identified by being the value of `generated-autoload-file'.
autoloads: $(LOADDEFS) doit
	chmod +w $(lisp)/ps-print.el $(lisp)/emulation/tpu-edt.el \
	  $(lisp)/emacs-lisp/cl-loaddefs.el $(lisp)/mail/rmail.el \
	  $(lisp)/dired.el $(lisp)/ibuffer.el
	wd=$(lisp); $(setwins_almost); \
	echo Directories: $$wins; \
	$(emacs) -l autoload --eval '(setq generated-autoload-file "$(lisp)/loaddefs.el")' -f batch-update-autoloads $$wins

# This is required by the bootstrap-emacs target in ../src/Makefile, so
# we know that if we have an emacs executable, we also have a subdirs.el.
$(lisp)/subdirs.el:
	$(MAKE) $(MFLAGS) update-subdirs
update-subdirs: doit
	wd=$(lisp); $(setwins_for_subdirs); \
	for file in $$wins; do \
	   $(srcdir)/update-subdirs $$file; \
	done;

updates: update-subdirs autoloads finder-data custom-deps

# This is useful after "bzr up".
bzr-update: recompile autoloads finder-data custom-deps

# For backwards compatibility:
cvs-update: bzr-update

# Update the AUTHORS file.

update-authors:
	$(emacs) -l authors -f batch-update-authors $(srcdir)/etc/AUTHORS $(srcdir)

TAGS TAGS-LISP: $(lisptagsfiles1) $(lisptagsfiles2) $(lisptagsfiles3) $(lisptagsfiles4)
	els=`echo $(lisptagsfiles1) $(lisptagsfiles2) $(lisptagsfiles3) $(lisptagsfiles4) | sed -e "s,$(lisp)/[^ ]*loaddefs[^ ]*,," -e "s,$(lisp)/ldefs-boot[^ ]*,,"`; \
	${ETAGS} -o $@ $$els

.PHONY: update-elclist

## Post-bootstrap, find the list of .elc files and use sed to update
## ELCFILES in Makefile.in.
## Errors in the final sed are non-fatal, since they have no effect on
## building Emacs.  chmod +w is for CVSREAD=1.
## "echo" is non-portable with regards to backslashes, eg between zsh
## and bash.  Hence the use of sed on line 2 below (line 1 seems to be OK).
## http://lists.gnu.org/archive/html/emacs-devel/2008-05/msg01535.html
update-elclist:
	echo "/^ELCFILES/,/^$$/c\\" > temp.sed
	echo "ELCFILES =" | sed -e 's/$$/ \\\\\\/' >> temp.sed
	LC_COLLATE=C ls $(lisp)/*.elc $(lisp)/*/*.elc $(lisp)/*/*/*.elc $(lisp)/*/*/*/*.elc | sed -e "s|^$(lisp)|	\$$(lisp)|" -e 's/$$/ \\\\\\/' -e '$$ s/ \\\\//' >> temp.sed
	echo "" >> temp.sed
	-sed -f temp.sed $(lisp)/Makefile.in > temp-elcfiles || rm temp-elcfiles
	rm temp.sed
	@test -f temp-elcfiles || echo "Maintainer warning: failed to update Makefile.in.  You can ignore this if you are not an Emacs developer."
	if test -f temp-elcfiles; then \
	  chmod +w $(lisp)/Makefile.in; \
	  mv -f temp-elcfiles $(lisp)/Makefile.in; \
	fi
	-(LC_COLLATE=C ls $(lisp)/*.elc $(lisp)/*/*.elc $(lisp)/*/*/*.elc $(lisp)/*/*/*/*.elc | sed 's/elc$$/el/';  \
	  LC_COLLATE=C ls $(lisp)/*.el $(lisp)/*/*.el $(lisp)/*/*/*.el $(lisp)/*/*/*/*.el; \
	  LC_COLLATE=C ls $(lisp)/*.el $(lisp)/*/*.el $(lisp)/*/*/*.el $(lisp)/*/*/*/*.el) |	   \
	     sort | uniq -u | while read extra; do 			   \
	         echo "Found left over byte-compiled file: $${extra}c !!" ;\
	     done

## Explicitly list the .elc files, for the sake of parallel builds.
## http://lists.gnu.org/archive/html/bug-gnu-emacs/2008-05/msg00016.html
## This can probably be done more elegantly, but needs to be portable.
ELCFILES = \
	$(lisp)/abbrev.elc \
	$(lisp)/abbrevlist.elc \
	$(lisp)/add-log.elc \
	$(lisp)/align.elc \
	$(lisp)/allout.elc \
	$(lisp)/ansi-color.elc \
	$(lisp)/apropos.elc \
	$(lisp)/arc-mode.elc \
	$(lisp)/array.elc \
	$(lisp)/autoarg.elc \
	$(lisp)/autoinsert.elc \
	$(lisp)/autorevert.elc \
	$(lisp)/avoid.elc \
	$(lisp)/battery.elc \
	$(lisp)/bindings.elc \
	$(lisp)/bookmark.elc \
	$(lisp)/bs.elc \
	$(lisp)/buff-menu.elc \
	$(lisp)/button.elc \
	$(lisp)/calc/calc-aent.elc \
	$(lisp)/calc/calc-alg.elc \
	$(lisp)/calc/calc-arith.elc \
	$(lisp)/calc/calc-bin.elc \
	$(lisp)/calc/calc-comb.elc \
	$(lisp)/calc/calc-cplx.elc \
	$(lisp)/calc/calc-embed.elc \
	$(lisp)/calc/calc-ext.elc \
	$(lisp)/calc/calc-fin.elc \
	$(lisp)/calc/calc-forms.elc \
	$(lisp)/calc/calc-frac.elc \
	$(lisp)/calc/calc-funcs.elc \
	$(lisp)/calc/calc-graph.elc \
	$(lisp)/calc/calc-help.elc \
	$(lisp)/calc/calc-incom.elc \
	$(lisp)/calc/calc-keypd.elc \
	$(lisp)/calc/calc-lang.elc \
	$(lisp)/calc/calc-macs.elc \
	$(lisp)/calc/calc-map.elc \
	$(lisp)/calc/calc-math.elc \
	$(lisp)/calc/calc-menu.elc \
	$(lisp)/calc/calc-misc.elc \
	$(lisp)/calc/calc-mode.elc \
	$(lisp)/calc/calc-mtx.elc \
	$(lisp)/calc/calc-nlfit.elc \
	$(lisp)/calc/calc-poly.elc \
	$(lisp)/calc/calc-prog.elc \
	$(lisp)/calc/calc-rewr.elc \
	$(lisp)/calc/calc-rules.elc \
	$(lisp)/calc/calc-sel.elc \
	$(lisp)/calc/calc-stat.elc \
	$(lisp)/calc/calc-store.elc \
	$(lisp)/calc/calc-stuff.elc \
	$(lisp)/calc/calc-trail.elc \
	$(lisp)/calc/calc-undo.elc \
	$(lisp)/calc/calc-units.elc \
	$(lisp)/calc/calc-vec.elc \
	$(lisp)/calc/calc-yank.elc \
	$(lisp)/calc/calc.elc \
	$(lisp)/calc/calcalg2.elc \
	$(lisp)/calc/calcalg3.elc \
	$(lisp)/calc/calccomp.elc \
	$(lisp)/calc/calcsel2.elc \
	$(lisp)/calculator.elc \
	$(lisp)/calendar/appt.elc \
	$(lisp)/calendar/cal-bahai.elc \
	$(lisp)/calendar/cal-china.elc \
	$(lisp)/calendar/cal-coptic.elc \
	$(lisp)/calendar/cal-dst.elc \
	$(lisp)/calendar/cal-french.elc \
	$(lisp)/calendar/cal-hebrew.elc \
	$(lisp)/calendar/cal-html.elc \
	$(lisp)/calendar/cal-islam.elc \
	$(lisp)/calendar/cal-iso.elc \
	$(lisp)/calendar/cal-julian.elc \
	$(lisp)/calendar/cal-mayan.elc \
	$(lisp)/calendar/cal-menu.elc \
	$(lisp)/calendar/cal-move.elc \
	$(lisp)/calendar/cal-persia.elc \
	$(lisp)/calendar/cal-tex.elc \
	$(lisp)/calendar/cal-x.elc \
	$(lisp)/calendar/calendar.elc \
	$(lisp)/calendar/diary-lib.elc \
	$(lisp)/calendar/holidays.elc \
	$(lisp)/calendar/icalendar.elc \
	$(lisp)/calendar/lunar.elc \
	$(lisp)/calendar/parse-time.elc \
	$(lisp)/calendar/solar.elc \
	$(lisp)/calendar/time-date.elc \
	$(lisp)/calendar/timeclock.elc \
	$(lisp)/calendar/todo-mode.elc \
	$(lisp)/case-table.elc \
	$(lisp)/cdl.elc \
	$(lisp)/cedet/cedet-cscope.elc \
	$(lisp)/cedet/cedet-files.elc \
	$(lisp)/cedet/cedet-global.elc \
	$(lisp)/cedet/cedet-idutils.elc \
	$(lisp)/cedet/cedet.elc \
	$(lisp)/cedet/data-debug.elc \
	$(lisp)/cedet/ede.elc \
	$(lisp)/cedet/ede/auto.elc \
	$(lisp)/cedet/ede/autoconf-edit.elc \
	$(lisp)/cedet/ede/base.elc \
	$(lisp)/cedet/ede/cpp-root.elc \
	$(lisp)/cedet/ede/custom.elc \
	$(lisp)/cedet/ede/dired.elc \
	$(lisp)/cedet/ede/emacs.elc \
	$(lisp)/cedet/ede/files.elc \
	$(lisp)/cedet/ede/generic.elc \
	$(lisp)/cedet/ede/linux.elc \
	$(lisp)/cedet/ede/locate.elc \
	$(lisp)/cedet/ede/make.elc \
	$(lisp)/cedet/ede/makefile-edit.elc \
	$(lisp)/cedet/ede/pconf.elc \
	$(lisp)/cedet/ede/pmake.elc \
	$(lisp)/cedet/ede/proj-archive.elc \
	$(lisp)/cedet/ede/proj-aux.elc \
	$(lisp)/cedet/ede/proj-comp.elc \
	$(lisp)/cedet/ede/proj-elisp.elc \
	$(lisp)/cedet/ede/proj-info.elc \
	$(lisp)/cedet/ede/proj-misc.elc \
	$(lisp)/cedet/ede/proj-obj.elc \
	$(lisp)/cedet/ede/proj-prog.elc \
	$(lisp)/cedet/ede/proj-scheme.elc \
	$(lisp)/cedet/ede/proj-shared.elc \
	$(lisp)/cedet/ede/proj.elc \
	$(lisp)/cedet/ede/project-am.elc \
	$(lisp)/cedet/ede/shell.elc \
	$(lisp)/cedet/ede/simple.elc \
	$(lisp)/cedet/ede/source.elc \
	$(lisp)/cedet/ede/speedbar.elc \
	$(lisp)/cedet/ede/srecode.elc \
	$(lisp)/cedet/ede/system.elc \
	$(lisp)/cedet/ede/util.elc \
	$(lisp)/cedet/inversion.elc \
	$(lisp)/cedet/mode-local.elc \
	$(lisp)/cedet/pulse.elc \
	$(lisp)/cedet/semantic.elc \
	$(lisp)/cedet/semantic/analyze.elc \
	$(lisp)/cedet/semantic/analyze/complete.elc \
	$(lisp)/cedet/semantic/analyze/debug.elc \
	$(lisp)/cedet/semantic/analyze/fcn.elc \
	$(lisp)/cedet/semantic/analyze/refs.elc \
	$(lisp)/cedet/semantic/bovine.elc \
	$(lisp)/cedet/semantic/bovine/c-by.elc \
	$(lisp)/cedet/semantic/bovine/c.elc \
	$(lisp)/cedet/semantic/bovine/debug.elc \
	$(lisp)/cedet/semantic/bovine/el.elc \
	$(lisp)/cedet/semantic/bovine/gcc.elc \
	$(lisp)/cedet/semantic/bovine/make-by.elc \
	$(lisp)/cedet/semantic/bovine/make.elc \
	$(lisp)/cedet/semantic/bovine/scm-by.elc \
	$(lisp)/cedet/semantic/bovine/scm.elc \
	$(lisp)/cedet/semantic/chart.elc \
	$(lisp)/cedet/semantic/complete.elc \
	$(lisp)/cedet/semantic/ctxt.elc \
	$(lisp)/cedet/semantic/db-debug.elc \
	$(lisp)/cedet/semantic/db-ebrowse.elc \
	$(lisp)/cedet/semantic/db-el.elc \
	$(lisp)/cedet/semantic/db-file.elc \
	$(lisp)/cedet/semantic/db-find.elc \
	$(lisp)/cedet/semantic/db-global.elc \
	$(lisp)/cedet/semantic/db-javascript.elc \
	$(lisp)/cedet/semantic/db-mode.elc \
	$(lisp)/cedet/semantic/db-ref.elc \
	$(lisp)/cedet/semantic/db-typecache.elc \
	$(lisp)/cedet/semantic/db.elc \
	$(lisp)/cedet/semantic/debug.elc \
	$(lisp)/cedet/semantic/decorate.elc \
	$(lisp)/cedet/semantic/decorate/include.elc \
	$(lisp)/cedet/semantic/decorate/mode.elc \
	$(lisp)/cedet/semantic/dep.elc \
	$(lisp)/cedet/semantic/doc.elc \
	$(lisp)/cedet/semantic/ede-grammar.elc \
	$(lisp)/cedet/semantic/edit.elc \
	$(lisp)/cedet/semantic/find.elc \
	$(lisp)/cedet/semantic/format.elc \
	$(lisp)/cedet/semantic/fw.elc \
	$(lisp)/cedet/semantic/grammar-wy.elc \
	$(lisp)/cedet/semantic/grammar.elc \
	$(lisp)/cedet/semantic/html.elc \
	$(lisp)/cedet/semantic/ia-sb.elc \
	$(lisp)/cedet/semantic/ia.elc \
	$(lisp)/cedet/semantic/idle.elc \
	$(lisp)/cedet/semantic/imenu.elc \
	$(lisp)/cedet/semantic/java.elc \
	$(lisp)/cedet/semantic/lex-spp.elc \
	$(lisp)/cedet/semantic/lex.elc \
	$(lisp)/cedet/semantic/mru-bookmark.elc \
	$(lisp)/cedet/semantic/sb.elc \
	$(lisp)/cedet/semantic/scope.elc \
	$(lisp)/cedet/semantic/senator.elc \
	$(lisp)/cedet/semantic/sort.elc \
	$(lisp)/cedet/semantic/symref.elc \
	$(lisp)/cedet/semantic/symref/cscope.elc \
	$(lisp)/cedet/semantic/symref/filter.elc \
	$(lisp)/cedet/semantic/symref/global.elc \
	$(lisp)/cedet/semantic/symref/grep.elc \
	$(lisp)/cedet/semantic/symref/idutils.elc \
	$(lisp)/cedet/semantic/symref/list.elc \
	$(lisp)/cedet/semantic/tag-file.elc \
	$(lisp)/cedet/semantic/tag-ls.elc \
	$(lisp)/cedet/semantic/tag-write.elc \
	$(lisp)/cedet/semantic/tag.elc \
	$(lisp)/cedet/semantic/texi.elc \
	$(lisp)/cedet/semantic/util-modes.elc \
	$(lisp)/cedet/semantic/util.elc \
	$(lisp)/cedet/semantic/wisent.elc \
	$(lisp)/cedet/semantic/wisent/comp.elc \
	$(lisp)/cedet/semantic/wisent/java-tags.elc \
	$(lisp)/cedet/semantic/wisent/javascript.elc \
	$(lisp)/cedet/semantic/wisent/javat-wy.elc \
	$(lisp)/cedet/semantic/wisent/js-wy.elc \
	$(lisp)/cedet/semantic/wisent/python-wy.elc \
	$(lisp)/cedet/semantic/wisent/python.elc \
	$(lisp)/cedet/semantic/wisent/wisent.elc \
	$(lisp)/cedet/srecode.elc \
	$(lisp)/cedet/srecode/args.elc \
	$(lisp)/cedet/srecode/compile.elc \
	$(lisp)/cedet/srecode/cpp.elc \
	$(lisp)/cedet/srecode/ctxt.elc \
	$(lisp)/cedet/srecode/dictionary.elc \
	$(lisp)/cedet/srecode/document.elc \
	$(lisp)/cedet/srecode/el.elc \
	$(lisp)/cedet/srecode/expandproto.elc \
	$(lisp)/cedet/srecode/extract.elc \
	$(lisp)/cedet/srecode/fields.elc \
	$(lisp)/cedet/srecode/filters.elc \
	$(lisp)/cedet/srecode/find.elc \
	$(lisp)/cedet/srecode/getset.elc \
	$(lisp)/cedet/srecode/insert.elc \
	$(lisp)/cedet/srecode/java.elc \
	$(lisp)/cedet/srecode/map.elc \
	$(lisp)/cedet/srecode/mode.elc \
	$(lisp)/cedet/srecode/semantic.elc \
	$(lisp)/cedet/srecode/srt-mode.elc \
	$(lisp)/cedet/srecode/srt-wy.elc \
	$(lisp)/cedet/srecode/srt.elc \
	$(lisp)/cedet/srecode/table.elc \
	$(lisp)/cedet/srecode/template.elc \
	$(lisp)/cedet/srecode/texi.elc \
	$(lisp)/chistory.elc \
	$(lisp)/cmuscheme.elc \
	$(lisp)/comint.elc \
	$(lisp)/compare-w.elc \
	$(lisp)/complete.elc \
	$(lisp)/completion.elc \
	$(lisp)/composite.elc \
	$(lisp)/cus-dep.elc \
	$(lisp)/cus-edit.elc \
	$(lisp)/cus-face.elc \
	$(lisp)/cus-start.elc \
	$(lisp)/cus-theme.elc \
	$(lisp)/custom.elc \
	$(lisp)/cvs-status.elc \
	$(lisp)/dabbrev.elc \
	$(lisp)/delim-col.elc \
	$(lisp)/delsel.elc \
	$(lisp)/descr-text.elc \
	$(lisp)/desktop.elc \
	$(lisp)/dframe.elc \
	$(lisp)/diff-mode.elc \
	$(lisp)/diff.elc \
	$(lisp)/dired-aux.elc \
	$(lisp)/dired-x.elc \
	$(lisp)/dired.elc \
	$(lisp)/dirtrack.elc \
	$(lisp)/disp-table.elc \
	$(lisp)/dnd.elc \
	$(lisp)/doc-view.elc \
	$(lisp)/dos-fns.elc \
	$(lisp)/dos-vars.elc \
	$(lisp)/dos-w32.elc \
	$(lisp)/double.elc \
	$(lisp)/ebuff-menu.elc \
	$(lisp)/echistory.elc \
	$(lisp)/ediff-diff.elc \
	$(lisp)/ediff-help.elc \
	$(lisp)/ediff-hook.elc \
	$(lisp)/ediff-init.elc \
	$(lisp)/ediff-merg.elc \
	$(lisp)/ediff-mult.elc \
	$(lisp)/ediff-ptch.elc \
	$(lisp)/ediff-util.elc \
	$(lisp)/ediff-vers.elc \
	$(lisp)/ediff-wind.elc \
	$(lisp)/ediff.elc \
	$(lisp)/edmacro.elc \
	$(lisp)/ehelp.elc \
	$(lisp)/electric.elc \
	$(lisp)/elide-head.elc \
	$(lisp)/emacs-lisp/advice.elc \
	$(lisp)/emacs-lisp/assoc.elc \
	$(lisp)/emacs-lisp/authors.elc \
	$(lisp)/emacs-lisp/autoload.elc \
	$(lisp)/emacs-lisp/avl-tree.elc \
	$(lisp)/emacs-lisp/backquote.elc \
	$(lisp)/emacs-lisp/benchmark.elc \
	$(lisp)/emacs-lisp/bindat.elc \
	$(lisp)/emacs-lisp/byte-opt.elc \
	$(lisp)/emacs-lisp/byte-run.elc \
	$(lisp)/emacs-lisp/bytecomp.elc \
	$(lisp)/emacs-lisp/chart.elc \
	$(lisp)/emacs-lisp/check-declare.elc \
	$(lisp)/emacs-lisp/checkdoc.elc \
	$(lisp)/emacs-lisp/cl-extra.elc \
	$(lisp)/emacs-lisp/cl-indent.elc \
	$(lisp)/emacs-lisp/cl-macs.elc \
	$(lisp)/emacs-lisp/cl-seq.elc \
	$(lisp)/emacs-lisp/cl.elc \
	$(lisp)/emacs-lisp/copyright.elc \
	$(lisp)/emacs-lisp/crm.elc \
	$(lisp)/emacs-lisp/cust-print.elc \
	$(lisp)/emacs-lisp/debug.elc \
	$(lisp)/emacs-lisp/derived.elc \
	$(lisp)/emacs-lisp/disass.elc \
	$(lisp)/emacs-lisp/easy-mmode.elc \
	$(lisp)/emacs-lisp/easymenu.elc \
	$(lisp)/emacs-lisp/edebug.elc \
	$(lisp)/emacs-lisp/eieio-base.elc \
	$(lisp)/emacs-lisp/eieio-comp.elc \
	$(lisp)/emacs-lisp/eieio-custom.elc \
	$(lisp)/emacs-lisp/eieio-datadebug.elc \
	$(lisp)/emacs-lisp/eieio-opt.elc \
	$(lisp)/emacs-lisp/eieio-speedbar.elc \
	$(lisp)/emacs-lisp/eieio.elc \
	$(lisp)/emacs-lisp/eldoc.elc \
	$(lisp)/emacs-lisp/elint.elc \
	$(lisp)/emacs-lisp/elp.elc \
	$(lisp)/emacs-lisp/ewoc.elc \
	$(lisp)/emacs-lisp/find-func.elc \
	$(lisp)/emacs-lisp/find-gc.elc \
	$(lisp)/emacs-lisp/float-sup.elc \
	$(lisp)/emacs-lisp/generic.elc \
	$(lisp)/emacs-lisp/gulp.elc \
	$(lisp)/emacs-lisp/helper.elc \
	$(lisp)/emacs-lisp/lisp-mnt.elc \
	$(lisp)/emacs-lisp/lisp-mode.elc \
	$(lisp)/emacs-lisp/lisp.elc \
	$(lisp)/emacs-lisp/macroexp.elc \
	$(lisp)/emacs-lisp/map-ynp.elc \
	$(lisp)/emacs-lisp/pp.elc \
	$(lisp)/emacs-lisp/re-builder.elc \
	$(lisp)/emacs-lisp/regexp-opt.elc \
	$(lisp)/emacs-lisp/regi.elc \
	$(lisp)/emacs-lisp/ring.elc \
	$(lisp)/emacs-lisp/rx.elc \
	$(lisp)/emacs-lisp/shadow.elc \
	$(lisp)/emacs-lisp/smie.elc \
	$(lisp)/emacs-lisp/sregex.elc \
	$(lisp)/emacs-lisp/syntax.elc \
	$(lisp)/emacs-lisp/tcover-ses.elc \
	$(lisp)/emacs-lisp/tcover-unsafep.elc \
	$(lisp)/emacs-lisp/testcover.elc \
	$(lisp)/emacs-lisp/timer.elc \
	$(lisp)/emacs-lisp/tq.elc \
	$(lisp)/emacs-lisp/trace.elc \
	$(lisp)/emacs-lisp/unsafep.elc \
	$(lisp)/emacs-lisp/warnings.elc \
	$(lisp)/emacs-lock.elc \
	$(lisp)/emerge.elc \
	$(lisp)/emulation/crisp.elc \
	$(lisp)/emulation/cua-base.elc \
	$(lisp)/emulation/cua-gmrk.elc \
	$(lisp)/emulation/cua-rect.elc \
	$(lisp)/emulation/edt-lk201.elc \
	$(lisp)/emulation/edt-mapper.elc \
	$(lisp)/emulation/edt-pc.elc \
	$(lisp)/emulation/edt-vt100.elc \
	$(lisp)/emulation/edt.elc \
	$(lisp)/emulation/keypad.elc \
	$(lisp)/emulation/pc-mode.elc \
	$(lisp)/emulation/pc-select.elc \
	$(lisp)/emulation/tpu-edt.elc \
	$(lisp)/emulation/tpu-extras.elc \
	$(lisp)/emulation/tpu-mapper.elc \
	$(lisp)/emulation/vi.elc \
	$(lisp)/emulation/vip.elc \
	$(lisp)/emulation/viper-cmd.elc \
	$(lisp)/emulation/viper-ex.elc \
	$(lisp)/emulation/viper-init.elc \
	$(lisp)/emulation/viper-keym.elc \
	$(lisp)/emulation/viper-macs.elc \
	$(lisp)/emulation/viper-mous.elc \
	$(lisp)/emulation/viper-util.elc \
	$(lisp)/emulation/viper.elc \
	$(lisp)/emulation/ws-mode.elc \
	$(lisp)/env.elc \
	$(lisp)/epa-dired.elc \
	$(lisp)/epa-file.elc \
	$(lisp)/epa-hook.elc \
	$(lisp)/epa-mail.elc \
	$(lisp)/epa.elc \
	$(lisp)/epg-config.elc \
	$(lisp)/epg.elc \
	$(lisp)/erc/erc-autoaway.elc \
	$(lisp)/erc/erc-backend.elc \
	$(lisp)/erc/erc-button.elc \
	$(lisp)/erc/erc-capab.elc \
	$(lisp)/erc/erc-compat.elc \
	$(lisp)/erc/erc-dcc.elc \
	$(lisp)/erc/erc-ezbounce.elc \
	$(lisp)/erc/erc-fill.elc \
	$(lisp)/erc/erc-goodies.elc \
	$(lisp)/erc/erc-hecomplete.elc \
	$(lisp)/erc/erc-ibuffer.elc \
	$(lisp)/erc/erc-identd.elc \
	$(lisp)/erc/erc-imenu.elc \
	$(lisp)/erc/erc-join.elc \
	$(lisp)/erc/erc-lang.elc \
	$(lisp)/erc/erc-list.elc \
	$(lisp)/erc/erc-log.elc \
	$(lisp)/erc/erc-match.elc \
	$(lisp)/erc/erc-menu.elc \
	$(lisp)/erc/erc-netsplit.elc \
	$(lisp)/erc/erc-networks.elc \
	$(lisp)/erc/erc-notify.elc \
	$(lisp)/erc/erc-page.elc \
	$(lisp)/erc/erc-pcomplete.elc \
	$(lisp)/erc/erc-replace.elc \
	$(lisp)/erc/erc-ring.elc \
	$(lisp)/erc/erc-services.elc \
	$(lisp)/erc/erc-sound.elc \
	$(lisp)/erc/erc-speedbar.elc \
	$(lisp)/erc/erc-spelling.elc \
	$(lisp)/erc/erc-stamp.elc \
	$(lisp)/erc/erc-track.elc \
	$(lisp)/erc/erc-truncate.elc \
	$(lisp)/erc/erc-xdcc.elc \
	$(lisp)/erc/erc.elc \
	$(lisp)/eshell/em-alias.elc \
	$(lisp)/eshell/em-banner.elc \
	$(lisp)/eshell/em-basic.elc \
	$(lisp)/eshell/em-cmpl.elc \
	$(lisp)/eshell/em-dirs.elc \
	$(lisp)/eshell/em-glob.elc \
	$(lisp)/eshell/em-hist.elc \
	$(lisp)/eshell/em-ls.elc \
	$(lisp)/eshell/em-pred.elc \
	$(lisp)/eshell/em-prompt.elc \
	$(lisp)/eshell/em-rebind.elc \
	$(lisp)/eshell/em-script.elc \
	$(lisp)/eshell/em-smart.elc \
	$(lisp)/eshell/em-term.elc \
	$(lisp)/eshell/em-unix.elc \
	$(lisp)/eshell/em-xtra.elc \
	$(lisp)/eshell/esh-arg.elc \
	$(lisp)/eshell/esh-cmd.elc \
	$(lisp)/eshell/esh-ext.elc \
	$(lisp)/eshell/esh-io.elc \
	$(lisp)/eshell/esh-mode.elc \
	$(lisp)/eshell/esh-module.elc \
	$(lisp)/eshell/esh-opt.elc \
	$(lisp)/eshell/esh-proc.elc \
	$(lisp)/eshell/esh-test.elc \
	$(lisp)/eshell/esh-util.elc \
	$(lisp)/eshell/esh-var.elc \
	$(lisp)/eshell/eshell.elc \
	$(lisp)/expand.elc \
	$(lisp)/ezimage.elc \
	$(lisp)/face-remap.elc \
	$(lisp)/facemenu.elc \
	$(lisp)/faces.elc \
	$(lisp)/ffap.elc \
	$(lisp)/filecache.elc \
	$(lisp)/files-x.elc \
	$(lisp)/files.elc \
	$(lisp)/filesets.elc \
	$(lisp)/find-cmd.elc \
	$(lisp)/find-dired.elc \
	$(lisp)/find-file.elc \
	$(lisp)/find-lisp.elc \
	$(lisp)/finder.elc \
	$(lisp)/flow-ctrl.elc \
	$(lisp)/foldout.elc \
	$(lisp)/follow.elc \
	$(lisp)/font-core.elc \
	$(lisp)/font-lock.elc \
	$(lisp)/font-setting.elc \
	$(lisp)/format-spec.elc \
	$(lisp)/format.elc \
	$(lisp)/forms.elc \
	$(lisp)/frame.elc \
	$(lisp)/fringe.elc \
	$(lisp)/generic-x.elc \
	$(lisp)/gnus/auth-source.elc \
	$(lisp)/gnus/canlock.elc \
	$(lisp)/gnus/compface.elc \
	$(lisp)/gnus/deuglify.elc \
	$(lisp)/gnus/earcon.elc \
	$(lisp)/gnus/ecomplete.elc \
	$(lisp)/gnus/flow-fill.elc \
	$(lisp)/gnus/gmm-utils.elc \
	$(lisp)/gnus/gnus-agent.elc \
	$(lisp)/gnus/gnus-art.elc \
	$(lisp)/gnus/gnus-async.elc \
	$(lisp)/gnus/gnus-audio.elc \
	$(lisp)/gnus/gnus-bcklg.elc \
	$(lisp)/gnus/gnus-bookmark.elc \
	$(lisp)/gnus/gnus-cache.elc \
	$(lisp)/gnus/gnus-cite.elc \
	$(lisp)/gnus/gnus-cus.elc \
	$(lisp)/gnus/gnus-delay.elc \
	$(lisp)/gnus/gnus-demon.elc \
	$(lisp)/gnus/gnus-diary.elc \
	$(lisp)/gnus/gnus-dired.elc \
	$(lisp)/gnus/gnus-draft.elc \
	$(lisp)/gnus/gnus-dup.elc \
	$(lisp)/gnus/gnus-eform.elc \
	$(lisp)/gnus/gnus-ems.elc \
	$(lisp)/gnus/gnus-fun.elc \
	$(lisp)/gnus/gnus-group.elc \
	$(lisp)/gnus/gnus-int.elc \
	$(lisp)/gnus/gnus-kill.elc \
	$(lisp)/gnus/gnus-logic.elc \
	$(lisp)/gnus/gnus-mh.elc \
	$(lisp)/gnus/gnus-ml.elc \
	$(lisp)/gnus/gnus-mlspl.elc \
	$(lisp)/gnus/gnus-move.elc \
	$(lisp)/gnus/gnus-msg.elc \
	$(lisp)/gnus/gnus-nocem.elc \
	$(lisp)/gnus/gnus-picon.elc \
	$(lisp)/gnus/gnus-range.elc \
	$(lisp)/gnus/gnus-registry.elc \
	$(lisp)/gnus/gnus-salt.elc \
	$(lisp)/gnus/gnus-score.elc \
	$(lisp)/gnus/gnus-setup.elc \
	$(lisp)/gnus/gnus-sieve.elc \
	$(lisp)/gnus/gnus-soup.elc \
	$(lisp)/gnus/gnus-spec.elc \
	$(lisp)/gnus/gnus-srvr.elc \
	$(lisp)/gnus/gnus-start.elc \
	$(lisp)/gnus/gnus-sum.elc \
	$(lisp)/gnus/gnus-topic.elc \
	$(lisp)/gnus/gnus-undo.elc \
	$(lisp)/gnus/gnus-util.elc \
	$(lisp)/gnus/gnus-uu.elc \
	$(lisp)/gnus/gnus-vm.elc \
	$(lisp)/gnus/gnus-win.elc \
	$(lisp)/gnus/gnus.elc \
	$(lisp)/gnus/html2text.elc \
	$(lisp)/gnus/ietf-drums.elc \
	$(lisp)/gnus/legacy-gnus-agent.elc \
	$(lisp)/gnus/mail-parse.elc \
	$(lisp)/gnus/mail-prsvr.elc \
	$(lisp)/gnus/mail-source.elc \
	$(lisp)/gnus/mailcap.elc \
	$(lisp)/gnus/message.elc \
	$(lisp)/gnus/messcompat.elc \
	$(lisp)/gnus/mm-bodies.elc \
	$(lisp)/gnus/mm-decode.elc \
	$(lisp)/gnus/mm-encode.elc \
	$(lisp)/gnus/mm-extern.elc \
	$(lisp)/gnus/mm-partial.elc \
	$(lisp)/gnus/mm-url.elc \
	$(lisp)/gnus/mm-util.elc \
	$(lisp)/gnus/mm-uu.elc \
	$(lisp)/gnus/mm-view.elc \
	$(lisp)/gnus/mml-sec.elc \
	$(lisp)/gnus/mml-smime.elc \
	$(lisp)/gnus/mml.elc \
	$(lisp)/gnus/mml1991.elc \
	$(lisp)/gnus/mml2015.elc \
	$(lisp)/gnus/nnagent.elc \
	$(lisp)/gnus/nnbabyl.elc \
	$(lisp)/gnus/nndb.elc \
	$(lisp)/gnus/nndiary.elc \
	$(lisp)/gnus/nndir.elc \
	$(lisp)/gnus/nndoc.elc \
	$(lisp)/gnus/nndraft.elc \
	$(lisp)/gnus/nneething.elc \
	$(lisp)/gnus/nnfolder.elc \
	$(lisp)/gnus/nngateway.elc \
	$(lisp)/gnus/nnheader.elc \
	$(lisp)/gnus/nnimap.elc \
	$(lisp)/gnus/nnir.elc \
	$(lisp)/gnus/nnkiboze.elc \
	$(lisp)/gnus/nnlistserv.elc \
	$(lisp)/gnus/nnmail.elc \
	$(lisp)/gnus/nnmaildir.elc \
	$(lisp)/gnus/nnmairix.elc \
	$(lisp)/gnus/nnmbox.elc \
	$(lisp)/gnus/nnmh.elc \
	$(lisp)/gnus/nnml.elc \
	$(lisp)/gnus/nnnil.elc \
	$(lisp)/gnus/nnoo.elc \
	$(lisp)/gnus/nnrss.elc \
	$(lisp)/gnus/nnslashdot.elc \
	$(lisp)/gnus/nnsoup.elc \
	$(lisp)/gnus/nnspool.elc \
	$(lisp)/gnus/nntp.elc \
	$(lisp)/gnus/nnultimate.elc \
	$(lisp)/gnus/nnvirtual.elc \
	$(lisp)/gnus/nnwarchive.elc \
	$(lisp)/gnus/nnweb.elc \
	$(lisp)/gnus/nnwfm.elc \
	$(lisp)/gnus/pop3.elc \
	$(lisp)/gnus/qp.elc \
	$(lisp)/gnus/rfc1843.elc \
	$(lisp)/gnus/rfc2045.elc \
	$(lisp)/gnus/rfc2047.elc \
	$(lisp)/gnus/rfc2104.elc \
	$(lisp)/gnus/rfc2231.elc \
	$(lisp)/gnus/score-mode.elc \
	$(lisp)/gnus/sieve-manage.elc \
	$(lisp)/gnus/sieve-mode.elc \
	$(lisp)/gnus/sieve.elc \
	$(lisp)/gnus/smiley.elc \
	$(lisp)/gnus/smime.elc \
	$(lisp)/gnus/spam-report.elc \
	$(lisp)/gnus/spam-stat.elc \
	$(lisp)/gnus/spam-wash.elc \
	$(lisp)/gnus/spam.elc \
	$(lisp)/gnus/starttls.elc \
	$(lisp)/gnus/utf7.elc \
	$(lisp)/gnus/webmail.elc \
	$(lisp)/gnus/yenc.elc \
	$(lisp)/gs.elc \
	$(lisp)/help-at-pt.elc \
	$(lisp)/help-fns.elc \
	$(lisp)/help-macro.elc \
	$(lisp)/help-mode.elc \
	$(lisp)/help.elc \
	$(lisp)/hex-util.elc \
	$(lisp)/hexl.elc \
	$(lisp)/hfy-cmap.elc \
	$(lisp)/hi-lock.elc \
	$(lisp)/hilit-chg.elc \
	$(lisp)/hippie-exp.elc \
	$(lisp)/hl-line.elc \
	$(lisp)/htmlfontify.elc \
	$(lisp)/ibuf-ext.elc \
	$(lisp)/ibuf-macs.elc \
	$(lisp)/ibuffer.elc \
	$(lisp)/icomplete.elc \
	$(lisp)/ido.elc \
	$(lisp)/ielm.elc \
	$(lisp)/iimage.elc \
	$(lisp)/image-dired.elc \
	$(lisp)/image-file.elc \
	$(lisp)/image-mode.elc \
	$(lisp)/image.elc \
	$(lisp)/imenu.elc \
	$(lisp)/indent.elc \
	$(lisp)/info-look.elc \
	$(lisp)/info-xref.elc \
	$(lisp)/info.elc \
	$(lisp)/informat.elc \
	$(lisp)/international/ccl.elc \
	$(lisp)/international/characters.elc \
	$(lisp)/international/fontset.elc \
	$(lisp)/international/isearch-x.elc \
	$(lisp)/international/iso-ascii.elc \
	$(lisp)/international/iso-cvt.elc \
	$(lisp)/international/iso-transl.elc \
	$(lisp)/international/ja-dic-cnv.elc \
	$(lisp)/international/ja-dic-utl.elc \
	$(lisp)/international/kinsoku.elc \
	$(lisp)/international/kkc.elc \
	$(lisp)/international/latexenc.elc \
	$(lisp)/international/latin1-disp.elc \
	$(lisp)/international/mule-cmds.elc \
	$(lisp)/international/mule-conf.elc \
	$(lisp)/international/mule-diag.elc \
	$(lisp)/international/mule-util.elc \
	$(lisp)/international/mule.elc \
	$(lisp)/international/ogonek.elc \
	$(lisp)/international/quail.elc \
	$(lisp)/international/robin.elc \
	$(lisp)/international/titdic-cnv.elc \
	$(lisp)/international/ucs-normalize.elc \
	$(lisp)/international/utf-7.elc \
	$(lisp)/isearch.elc \
	$(lisp)/isearchb.elc \
	$(lisp)/iswitchb.elc \
	$(lisp)/jit-lock.elc \
	$(lisp)/jka-cmpr-hook.elc \
	$(lisp)/jka-compr.elc \
	$(lisp)/json.elc \
	$(lisp)/kermit.elc \
	$(lisp)/kmacro.elc \
	$(lisp)/language/china-util.elc \
	$(lisp)/language/chinese.elc \
	$(lisp)/language/cyril-util.elc \
	$(lisp)/language/cyrillic.elc \
	$(lisp)/language/ethio-util.elc \
	$(lisp)/language/ethiopic.elc \
	$(lisp)/language/european.elc \
	$(lisp)/language/hanja-util.elc \
	$(lisp)/language/ind-util.elc \
	$(lisp)/language/indian.elc \
	$(lisp)/language/japan-util.elc \
	$(lisp)/language/korea-util.elc \
	$(lisp)/language/lao-util.elc \
	$(lisp)/language/thai-util.elc \
	$(lisp)/language/thai-word.elc \
	$(lisp)/language/tibet-util.elc \
	$(lisp)/language/tibetan.elc \
	$(lisp)/language/tv-util.elc \
	$(lisp)/language/viet-util.elc \
	$(lisp)/language/vietnamese.elc \
	$(lisp)/ledit.elc \
	$(lisp)/linum.elc \
	$(lisp)/loadhist.elc \
	$(lisp)/locate.elc \
	$(lisp)/log-edit.elc \
	$(lisp)/log-view.elc \
	$(lisp)/longlines.elc \
	$(lisp)/lpr.elc \
	$(lisp)/ls-lisp.elc \
	$(lisp)/macros.elc \
	$(lisp)/mail/binhex.elc \
	$(lisp)/mail/emacsbug.elc \
	$(lisp)/mail/feedmail.elc \
	$(lisp)/mail/footnote.elc \
	$(lisp)/mail/hashcash.elc \
	$(lisp)/mail/mail-extr.elc \
	$(lisp)/mail/mail-hist.elc \
	$(lisp)/mail/mail-utils.elc \
	$(lisp)/mail/mailabbrev.elc \
	$(lisp)/mail/mailalias.elc \
	$(lisp)/mail/mailclient.elc \
	$(lisp)/mail/mailheader.elc \
	$(lisp)/mail/mailpost.elc \
	$(lisp)/mail/metamail.elc \
	$(lisp)/mail/mspools.elc \
	$(lisp)/mail/reporter.elc \
	$(lisp)/mail/rfc2368.elc \
	$(lisp)/mail/rfc822.elc \
	$(lisp)/mail/rmail-spam-filter.elc \
	$(lisp)/mail/rmail.elc \
	$(lisp)/mail/rmailedit.elc \
	$(lisp)/mail/rmailkwd.elc \
	$(lisp)/mail/rmailmm.elc \
	$(lisp)/mail/rmailmsc.elc \
	$(lisp)/mail/rmailout.elc \
	$(lisp)/mail/rmailsort.elc \
	$(lisp)/mail/rmailsum.elc \
	$(lisp)/mail/sendmail.elc \
	$(lisp)/mail/smtpmail.elc \
	$(lisp)/mail/supercite.elc \
	$(lisp)/mail/uce.elc \
	$(lisp)/mail/undigest.elc \
	$(lisp)/mail/unrmail.elc \
	$(lisp)/mail/uudecode.elc \
	$(lisp)/makesum.elc \
	$(lisp)/man.elc \
	$(lisp)/master.elc \
	$(lisp)/mb-depth.elc \
	$(lisp)/md4.elc \
	$(lisp)/menu-bar.elc \
	$(lisp)/mh-e/mh-alias.elc \
	$(lisp)/mh-e/mh-buffers.elc \
	$(lisp)/mh-e/mh-comp.elc \
	$(lisp)/mh-e/mh-e.elc \
	$(lisp)/mh-e/mh-folder.elc \
	$(lisp)/mh-e/mh-funcs.elc \
	$(lisp)/mh-e/mh-identity.elc \
	$(lisp)/mh-e/mh-inc.elc \
	$(lisp)/mh-e/mh-junk.elc \
	$(lisp)/mh-e/mh-letter.elc \
	$(lisp)/mh-e/mh-limit.elc \
	$(lisp)/mh-e/mh-mime.elc \
	$(lisp)/mh-e/mh-print.elc \
	$(lisp)/mh-e/mh-scan.elc \
	$(lisp)/mh-e/mh-search.elc \
	$(lisp)/mh-e/mh-seq.elc \
	$(lisp)/mh-e/mh-show.elc \
	$(lisp)/mh-e/mh-speed.elc \
	$(lisp)/mh-e/mh-thread.elc \
	$(lisp)/mh-e/mh-tool-bar.elc \
	$(lisp)/mh-e/mh-utils.elc \
	$(lisp)/mh-e/mh-xface.elc \
	$(lisp)/midnight.elc \
	$(lisp)/minibuf-eldef.elc \
	$(lisp)/minibuffer.elc \
	$(lisp)/misc.elc \
	$(lisp)/misearch.elc \
	$(lisp)/mouse-copy.elc \
	$(lisp)/mouse-drag.elc \
	$(lisp)/mouse-sel.elc \
	$(lisp)/mouse.elc \
	$(lisp)/mpc.elc \
	$(lisp)/msb.elc \
	$(lisp)/mwheel.elc \
	$(lisp)/net/ange-ftp.elc \
	$(lisp)/net/browse-url.elc \
	$(lisp)/net/dbus.elc \
	$(lisp)/net/dig.elc \
	$(lisp)/net/dns.elc \
	$(lisp)/net/eudc-bob.elc \
	$(lisp)/net/eudc-export.elc \
	$(lisp)/net/eudc-hotlist.elc \
	$(lisp)/net/eudc-vars.elc \
	$(lisp)/net/eudc.elc \
	$(lisp)/net/eudcb-bbdb.elc \
	$(lisp)/net/eudcb-ldap.elc \
	$(lisp)/net/eudcb-mab.elc \
	$(lisp)/net/eudcb-ph.elc \
	$(lisp)/net/goto-addr.elc \
	$(lisp)/net/hmac-def.elc \
	$(lisp)/net/hmac-md5.elc \
	$(lisp)/net/imap-hash.elc \
	$(lisp)/net/imap.elc \
	$(lisp)/net/ldap.elc \
	$(lisp)/net/mairix.elc \
	$(lisp)/net/net-utils.elc \
	$(lisp)/net/netrc.elc \
	$(lisp)/net/newst-backend.elc \
	$(lisp)/net/newst-plainview.elc \
	$(lisp)/net/newst-reader.elc \
	$(lisp)/net/newst-ticker.elc \
	$(lisp)/net/newst-treeview.elc \
	$(lisp)/net/newsticker.elc \
	$(lisp)/net/ntlm.elc \
	$(lisp)/net/quickurl.elc \
	$(lisp)/net/rcirc.elc \
	$(lisp)/net/rcompile.elc \
	$(lisp)/net/rlogin.elc \
	$(lisp)/net/sasl-cram.elc \
	$(lisp)/net/sasl-digest.elc \
	$(lisp)/net/sasl-ntlm.elc \
	$(lisp)/net/sasl.elc \
	$(lisp)/net/snmp-mode.elc \
	$(lisp)/net/socks.elc \
	$(lisp)/net/telnet.elc \
	$(lisp)/net/tls.elc \
	$(lisp)/net/tramp-cache.elc \
	$(lisp)/net/tramp-cmds.elc \
	$(lisp)/net/tramp-compat.elc \
	$(lisp)/net/tramp-fish.elc \
	$(lisp)/net/tramp-ftp.elc \
	$(lisp)/net/tramp-gvfs.elc \
	$(lisp)/net/tramp-gw.elc \
	$(lisp)/net/tramp-imap.elc \
	$(lisp)/net/tramp-smb.elc \
	$(lisp)/net/tramp-uu.elc \
	$(lisp)/net/tramp.elc \
	$(lisp)/net/trampver.elc \
	$(lisp)/net/webjump.elc \
	$(lisp)/net/xesam.elc \
	$(lisp)/net/zeroconf.elc \
	$(lisp)/newcomment.elc \
	$(lisp)/novice.elc \
	$(lisp)/nxml/nxml-enc.elc \
	$(lisp)/nxml/nxml-glyph.elc \
	$(lisp)/nxml/nxml-maint.elc \
	$(lisp)/nxml/nxml-mode.elc \
	$(lisp)/nxml/nxml-ns.elc \
	$(lisp)/nxml/nxml-outln.elc \
	$(lisp)/nxml/nxml-parse.elc \
	$(lisp)/nxml/nxml-rap.elc \
	$(lisp)/nxml/nxml-uchnm.elc \
	$(lisp)/nxml/nxml-util.elc \
	$(lisp)/nxml/rng-cmpct.elc \
	$(lisp)/nxml/rng-dt.elc \
	$(lisp)/nxml/rng-loc.elc \
	$(lisp)/nxml/rng-maint.elc \
	$(lisp)/nxml/rng-match.elc \
	$(lisp)/nxml/rng-nxml.elc \
	$(lisp)/nxml/rng-parse.elc \
	$(lisp)/nxml/rng-pttrn.elc \
	$(lisp)/nxml/rng-uri.elc \
	$(lisp)/nxml/rng-util.elc \
	$(lisp)/nxml/rng-valid.elc \
	$(lisp)/nxml/rng-xsd.elc \
	$(lisp)/nxml/xmltok.elc \
	$(lisp)/nxml/xsd-regexp.elc \
	$(lisp)/obsolete/awk-mode.elc \
	$(lisp)/obsolete/cl-compat.elc \
	$(lisp)/obsolete/fast-lock.elc \
	$(lisp)/obsolete/iso-acc.elc \
	$(lisp)/obsolete/iso-insert.elc \
	$(lisp)/obsolete/iso-swed.elc \
	$(lisp)/obsolete/lazy-lock.elc \
	$(lisp)/obsolete/levents.elc \
	$(lisp)/obsolete/lmenu.elc \
	$(lisp)/obsolete/lucid.elc \
	$(lisp)/obsolete/old-whitespace.elc \
	$(lisp)/obsolete/options.elc \
	$(lisp)/obsolete/resume.elc \
	$(lisp)/obsolete/rnews.elc \
	$(lisp)/obsolete/rnewspost.elc \
	$(lisp)/obsolete/sc.elc \
	$(lisp)/obsolete/scribe.elc \
	$(lisp)/obsolete/swedish.elc \
	$(lisp)/obsolete/sym-comp.elc \
	$(lisp)/obsolete/vc-mcvs.elc \
	$(lisp)/obsolete/x-menu.elc \
	$(lisp)/org/org-agenda.elc \
	$(lisp)/org/org-archive.elc \
	$(lisp)/org/org-ascii.elc \
	$(lisp)/org/org-attach.elc \
	$(lisp)/org/org-bbdb.elc \
	$(lisp)/org/org-bibtex.elc \
	$(lisp)/org/org-clock.elc \
	$(lisp)/org/org-colview.elc \
	$(lisp)/org/org-compat.elc \
	$(lisp)/org/org-crypt.elc \
	$(lisp)/org/org-datetree.elc \
	$(lisp)/org/org-docbook.elc \
	$(lisp)/org/org-exp-blocks.elc \
	$(lisp)/org/org-exp.elc \
	$(lisp)/org/org-faces.elc \
	$(lisp)/org/org-feed.elc \
	$(lisp)/org/org-footnote.elc \
	$(lisp)/org/org-freemind.elc \
	$(lisp)/org/org-gnus.elc \
	$(lisp)/org/org-habit.elc \
	$(lisp)/org/org-html.elc \
	$(lisp)/org/org-icalendar.elc \
	$(lisp)/org/org-id.elc \
	$(lisp)/org/org-indent.elc \
	$(lisp)/org/org-info.elc \
	$(lisp)/org/org-inlinetask.elc \
	$(lisp)/org/org-install.elc \
	$(lisp)/org/org-irc.elc \
	$(lisp)/org/org-jsinfo.elc \
	$(lisp)/org/org-latex.elc \
	$(lisp)/org/org-list.elc \
	$(lisp)/org/org-mac-message.elc \
	$(lisp)/org/org-macs.elc \
	$(lisp)/org/org-mew.elc \
	$(lisp)/org/org-mhe.elc \
	$(lisp)/org/org-mobile.elc \
	$(lisp)/org/org-mouse.elc \
	$(lisp)/org/org-plot.elc \
	$(lisp)/org/org-protocol.elc \
	$(lisp)/org/org-publish.elc \
	$(lisp)/org/org-remember.elc \
	$(lisp)/org/org-rmail.elc \
	$(lisp)/org/org-src.elc \
	$(lisp)/org/org-table.elc \
	$(lisp)/org/org-timer.elc \
	$(lisp)/org/org-vm.elc \
	$(lisp)/org/org-w3m.elc \
	$(lisp)/org/org-wl.elc \
	$(lisp)/org/org-xoxo.elc \
	$(lisp)/org/org.elc \
	$(lisp)/outline.elc \
	$(lisp)/paren.elc \
	$(lisp)/password-cache.elc \
	$(lisp)/pcmpl-cvs.elc \
	$(lisp)/pcmpl-gnu.elc \
	$(lisp)/pcmpl-linux.elc \
	$(lisp)/pcmpl-rpm.elc \
	$(lisp)/pcmpl-unix.elc \
	$(lisp)/pcomplete.elc \
	$(lisp)/pcvs-defs.elc \
	$(lisp)/pcvs-info.elc \
	$(lisp)/pcvs-parse.elc \
	$(lisp)/pcvs-util.elc \
	$(lisp)/pcvs.elc \
	$(lisp)/pgg-def.elc \
	$(lisp)/pgg-gpg.elc \
	$(lisp)/pgg-parse.elc \
	$(lisp)/pgg-pgp.elc \
	$(lisp)/pgg-pgp5.elc \
	$(lisp)/pgg.elc \
	$(lisp)/play/5x5.elc \
	$(lisp)/play/animate.elc \
	$(lisp)/play/blackbox.elc \
	$(lisp)/play/bubbles.elc \
	$(lisp)/play/cookie1.elc \
	$(lisp)/play/decipher.elc \
	$(lisp)/play/dissociate.elc \
	$(lisp)/play/doctor.elc \
	$(lisp)/play/dunnet.elc \
	$(lisp)/play/fortune.elc \
	$(lisp)/play/gamegrid.elc \
	$(lisp)/play/gametree.elc \
	$(lisp)/play/gomoku.elc \
	$(lisp)/play/handwrite.elc \
	$(lisp)/play/hanoi.elc \
	$(lisp)/play/landmark.elc \
	$(lisp)/play/life.elc \
	$(lisp)/play/meese.elc \
	$(lisp)/play/morse.elc \
	$(lisp)/play/mpuz.elc \
	$(lisp)/play/pong.elc \
	$(lisp)/play/snake.elc \
	$(lisp)/play/solitaire.elc \
	$(lisp)/play/spook.elc \
	$(lisp)/play/studly.elc \
	$(lisp)/play/tetris.elc \
	$(lisp)/play/yow.elc \
	$(lisp)/play/zone.elc \
	$(lisp)/printing.elc \
	$(lisp)/proced.elc \
	$(lisp)/progmodes/ada-mode.elc \
	$(lisp)/progmodes/ada-prj.elc \
	$(lisp)/progmodes/ada-stmt.elc \
	$(lisp)/progmodes/ada-xref.elc \
	$(lisp)/progmodes/antlr-mode.elc \
	$(lisp)/progmodes/asm-mode.elc \
	$(lisp)/progmodes/autoconf.elc \
	$(lisp)/progmodes/bug-reference.elc \
	$(lisp)/progmodes/cap-words.elc \
	$(lisp)/progmodes/cc-align.elc \
	$(lisp)/progmodes/cc-awk.elc \
	$(lisp)/progmodes/cc-bytecomp.elc \
	$(lisp)/progmodes/cc-cmds.elc \
	$(lisp)/progmodes/cc-compat.elc \
	$(lisp)/progmodes/cc-defs.elc \
	$(lisp)/progmodes/cc-engine.elc \
	$(lisp)/progmodes/cc-fonts.elc \
	$(lisp)/progmodes/cc-langs.elc \
	$(lisp)/progmodes/cc-menus.elc \
	$(lisp)/progmodes/cc-mode.elc \
	$(lisp)/progmodes/cc-styles.elc \
	$(lisp)/progmodes/cc-vars.elc \
	$(lisp)/progmodes/cfengine.elc \
	$(lisp)/progmodes/cmacexp.elc \
	$(lisp)/progmodes/compile.elc \
	$(lisp)/progmodes/cperl-mode.elc \
	$(lisp)/progmodes/cpp.elc \
	$(lisp)/progmodes/cwarn.elc \
	$(lisp)/progmodes/dcl-mode.elc \
	$(lisp)/progmodes/delphi.elc \
	$(lisp)/progmodes/ebnf-abn.elc \
	$(lisp)/progmodes/ebnf-bnf.elc \
	$(lisp)/progmodes/ebnf-dtd.elc \
	$(lisp)/progmodes/ebnf-ebx.elc \
	$(lisp)/progmodes/ebnf-iso.elc \
	$(lisp)/progmodes/ebnf-otz.elc \
	$(lisp)/progmodes/ebnf-yac.elc \
	$(lisp)/progmodes/ebnf2ps.elc \
	$(lisp)/progmodes/ebrowse.elc \
	$(lisp)/progmodes/etags.elc \
	$(lisp)/progmodes/executable.elc \
	$(lisp)/progmodes/f90.elc \
	$(lisp)/progmodes/flymake.elc \
	$(lisp)/progmodes/fortran.elc \
	$(lisp)/progmodes/gdb-ui.elc \
	$(lisp)/progmodes/glasses.elc \
	$(lisp)/progmodes/grep.elc \
	$(lisp)/progmodes/gud.elc \
	$(lisp)/progmodes/hideif.elc \
	$(lisp)/progmodes/hideshow.elc \
	$(lisp)/progmodes/icon.elc \
	$(lisp)/progmodes/idlw-complete-structtag.elc \
	$(lisp)/progmodes/idlw-help.elc \
	$(lisp)/progmodes/idlw-shell.elc \
	$(lisp)/progmodes/idlw-toolbar.elc \
	$(lisp)/progmodes/idlwave.elc \
	$(lisp)/progmodes/inf-lisp.elc \
	$(lisp)/progmodes/js.elc \
	$(lisp)/progmodes/ld-script.elc \
	$(lisp)/progmodes/m4-mode.elc \
	$(lisp)/progmodes/make-mode.elc \
	$(lisp)/progmodes/mantemp.elc \
	$(lisp)/progmodes/meta-mode.elc \
	$(lisp)/progmodes/mixal-mode.elc \
	$(lisp)/progmodes/modula2.elc \
	$(lisp)/progmodes/octave-inf.elc \
	$(lisp)/progmodes/octave-mod.elc \
	$(lisp)/progmodes/pascal.elc \
	$(lisp)/progmodes/perl-mode.elc \
	$(lisp)/progmodes/prolog.elc \
	$(lisp)/progmodes/ps-mode.elc \
	$(lisp)/progmodes/python.elc \
	$(lisp)/progmodes/ruby-mode.elc \
	$(lisp)/progmodes/scheme.elc \
	$(lisp)/progmodes/sh-script.elc \
	$(lisp)/progmodes/simula.elc \
	$(lisp)/progmodes/sql.elc \
	$(lisp)/progmodes/subword.elc \
	$(lisp)/progmodes/tcl.elc \
	$(lisp)/progmodes/vera-mode.elc \
	$(lisp)/progmodes/verilog-mode.elc \
	$(lisp)/progmodes/vhdl-mode.elc \
	$(lisp)/progmodes/which-func.elc \
	$(lisp)/progmodes/xscheme.elc \
	$(lisp)/ps-bdf.elc \
	$(lisp)/ps-def.elc \
	$(lisp)/ps-mule.elc \
	$(lisp)/ps-print.elc \
	$(lisp)/ps-samp.elc \
	$(lisp)/recentf.elc \
	$(lisp)/rect.elc \
	$(lisp)/register.elc \
	$(lisp)/repeat.elc \
	$(lisp)/replace.elc \
	$(lisp)/reposition.elc \
	$(lisp)/reveal.elc \
	$(lisp)/rfn-eshadow.elc \
	$(lisp)/rot13.elc \
	$(lisp)/ruler-mode.elc \
	$(lisp)/s-region.elc \
	$(lisp)/savehist.elc \
	$(lisp)/saveplace.elc \
	$(lisp)/sb-image.elc \
	$(lisp)/scroll-all.elc \
	$(lisp)/scroll-bar.elc \
	$(lisp)/scroll-lock.elc \
	$(lisp)/select.elc \
	$(lisp)/server.elc \
	$(lisp)/ses.elc \
	$(lisp)/sha1.elc \
	$(lisp)/shadowfile.elc \
	$(lisp)/shell.elc \
	$(lisp)/simple.elc \
	$(lisp)/skeleton.elc \
	$(lisp)/smerge-mode.elc \
	$(lisp)/sort.elc \
	$(lisp)/soundex.elc \
	$(lisp)/speedbar.elc \
	$(lisp)/startup.elc \
	$(lisp)/strokes.elc \
	$(lisp)/subr.elc \
	$(lisp)/t-mouse.elc \
	$(lisp)/tabify.elc \
	$(lisp)/talk.elc \
	$(lisp)/tar-mode.elc \
	$(lisp)/tempo.elc \
	$(lisp)/term.elc \
	$(lisp)/term/common-win.elc \
	$(lisp)/term/internal.elc \
	$(lisp)/term/ns-win.elc \
	$(lisp)/term/pc-win.elc \
	$(lisp)/term/rxvt.elc \
	$(lisp)/term/sun.elc \
	$(lisp)/term/sup-mouse.elc \
	$(lisp)/term/tty-colors.elc \
	$(lisp)/term/tvi970.elc \
	$(lisp)/term/vt100.elc \
	$(lisp)/term/w32-win.elc \
	$(lisp)/term/w32console.elc \
	$(lisp)/term/x-win.elc \
	$(lisp)/term/xterm.elc \
	$(lisp)/terminal.elc \
	$(lisp)/textmodes/artist.elc \
	$(lisp)/textmodes/bib-mode.elc \
	$(lisp)/textmodes/bibtex-style.elc \
	$(lisp)/textmodes/bibtex.elc \
	$(lisp)/textmodes/conf-mode.elc \
	$(lisp)/textmodes/css-mode.elc \
	$(lisp)/textmodes/dns-mode.elc \
	$(lisp)/textmodes/enriched.elc \
	$(lisp)/textmodes/fill.elc \
	$(lisp)/textmodes/flyspell.elc \
	$(lisp)/textmodes/ispell.elc \
	$(lisp)/textmodes/makeinfo.elc \
	$(lisp)/textmodes/nroff-mode.elc \
	$(lisp)/textmodes/page-ext.elc \
	$(lisp)/textmodes/page.elc \
	$(lisp)/textmodes/paragraphs.elc \
	$(lisp)/textmodes/picture.elc \
	$(lisp)/textmodes/po.elc \
	$(lisp)/textmodes/refbib.elc \
	$(lisp)/textmodes/refer.elc \
	$(lisp)/textmodes/refill.elc \
	$(lisp)/textmodes/reftex-auc.elc \
	$(lisp)/textmodes/reftex-cite.elc \
	$(lisp)/textmodes/reftex-dcr.elc \
	$(lisp)/textmodes/reftex-global.elc \
	$(lisp)/textmodes/reftex-index.elc \
	$(lisp)/textmodes/reftex-parse.elc \
	$(lisp)/textmodes/reftex-ref.elc \
	$(lisp)/textmodes/reftex-sel.elc \
	$(lisp)/textmodes/reftex-toc.elc \
	$(lisp)/textmodes/reftex-vars.elc \
	$(lisp)/textmodes/reftex.elc \
	$(lisp)/textmodes/remember.elc \
	$(lisp)/textmodes/rst.elc \
	$(lisp)/textmodes/sgml-mode.elc \
	$(lisp)/textmodes/spell.elc \
	$(lisp)/textmodes/table.elc \
	$(lisp)/textmodes/tex-mode.elc \
	$(lisp)/textmodes/texinfmt.elc \
	$(lisp)/textmodes/texinfo.elc \
	$(lisp)/textmodes/texnfo-upd.elc \
	$(lisp)/textmodes/text-mode.elc \
	$(lisp)/textmodes/tildify.elc \
	$(lisp)/textmodes/two-column.elc \
	$(lisp)/textmodes/underline.elc \
	$(lisp)/thingatpt.elc \
	$(lisp)/thumbs.elc \
	$(lisp)/time-stamp.elc \
	$(lisp)/time.elc \
	$(lisp)/timezone.elc \
	$(lisp)/tmm.elc \
	$(lisp)/tool-bar.elc \
	$(lisp)/tooltip.elc \
	$(lisp)/tree-widget.elc \
	$(lisp)/tutorial.elc \
	$(lisp)/type-break.elc \
	$(lisp)/uniquify.elc \
	$(lisp)/url/url-about.elc \
	$(lisp)/url/url-auth.elc \
	$(lisp)/url/url-cache.elc \
	$(lisp)/url/url-cid.elc \
	$(lisp)/url/url-cookie.elc \
	$(lisp)/url/url-dav.elc \
	$(lisp)/url/url-dired.elc \
	$(lisp)/url/url-expand.elc \
	$(lisp)/url/url-file.elc \
	$(lisp)/url/url-ftp.elc \
	$(lisp)/url/url-gw.elc \
	$(lisp)/url/url-handlers.elc \
	$(lisp)/url/url-history.elc \
	$(lisp)/url/url-http.elc \
	$(lisp)/url/url-imap.elc \
	$(lisp)/url/url-irc.elc \
	$(lisp)/url/url-ldap.elc \
	$(lisp)/url/url-mailto.elc \
	$(lisp)/url/url-methods.elc \
	$(lisp)/url/url-misc.elc \
	$(lisp)/url/url-news.elc \
	$(lisp)/url/url-nfs.elc \
	$(lisp)/url/url-ns.elc \
	$(lisp)/url/url-parse.elc \
	$(lisp)/url/url-privacy.elc \
	$(lisp)/url/url-proxy.elc \
	$(lisp)/url/url-util.elc \
	$(lisp)/url/url-vars.elc \
	$(lisp)/url/url.elc \
	$(lisp)/userlock.elc \
	$(lisp)/vc-annotate.elc \
	$(lisp)/vc-arch.elc \
	$(lisp)/vc-bzr.elc \
	$(lisp)/vc-cvs.elc \
	$(lisp)/vc-dav.elc \
	$(lisp)/vc-dir.elc \
	$(lisp)/vc-dispatcher.elc \
	$(lisp)/vc-git.elc \
	$(lisp)/vc-hg.elc \
	$(lisp)/vc-hooks.elc \
	$(lisp)/vc-mtn.elc \
	$(lisp)/vc-rcs.elc \
	$(lisp)/vc-sccs.elc \
	$(lisp)/vc-svn.elc \
	$(lisp)/vc.elc \
	$(lisp)/vcursor.elc \
	$(lisp)/view.elc \
	$(lisp)/vt-control.elc \
	$(lisp)/vt100-led.elc \
	$(lisp)/w32-fns.elc \
	$(lisp)/w32-vars.elc \
	$(lisp)/wdired.elc \
	$(lisp)/whitespace.elc \
	$(lisp)/wid-browse.elc \
	$(lisp)/wid-edit.elc \
	$(lisp)/widget.elc \
	$(lisp)/windmove.elc \
	$(lisp)/window.elc \
	$(lisp)/winner.elc \
	$(lisp)/woman.elc \
	$(lisp)/x-dnd.elc \
	$(lisp)/xml.elc \
	$(lisp)/xt-mouse.elc

# The src/Makefile.in has its own set of dependencies and when they decide
# that one Lisp file needs to be re-compiled, we had better recompile it as
# well, otherwise every subsequent make will again call us, until we finally
# end up deciding that yes, the file deserves recompilation.
# One option is to try and reproduce exactly the same dependencies here as
# we have in src/Makefile.in, but it turns out to be painful
# (e.g. src/Makefile.in may have a dependency for ../lisp/foo.elc where we
# only know of $(lisp)/foo.elc).  So instead we provide a direct way for
# src/Makefile.in to rebuild a particular Lisp file, no questions asked.
# Use byte-compile-refresh-preloaded to try and work around some of
# the most common problems of not bootstrapping from a clean state.
compile-onefile:
	@echo Compiling $(THEFILE)
	@# Use byte-compile-refresh-preloaded to try and work around some of
	@# the most common bootstrapping problems.
	@$(emacs) -l bytecomp -f byte-compile-refresh-preloaded $(BYTE_COMPILE_EXTRA_FLAGS) -f batch-byte-compile $(THEFILE)

# Files MUST be compiled one by one. If we compile several files in a
# row (i.e., in the same instance of Emacs) we can't make sure that
# the compilation environment is clean.  We also set the load-path of
# the Emacs used for compilation to the current directory and its
# subdirectories, to make sure require's and load's in the files being
# compiled find the right files.

.SUFFIXES: .elc .el

# An old-fashioned suffix rule, which, according to the GNU Make manual,
# cannot have prerequisites.
# Note that if a .el file is removed from the repository without
# updating ELCFILES, make will abort.
.el.elc:
	@echo Compiling $<
	@$(emacs) $(BYTE_COMPILE_EXTRA_FLAGS) -f batch-byte-compile $<

.PHONY: compile-first compile-main compile-last compile compile-always

compile-first: $(COMPILE_FIRST)

compile-main: $(ELCFILES)

# Compile all Lisp files, but don't recompile those that are up to
# date.  Some .el files don't get compiled because they set the
# local variable no-byte-compile.
# Calling make recursively because suffix rule cannot have prerequisites.
# Explicitly pass EMACS (sometimes ../src/bootstrap-emacs) to those
# sub-makes that run rules that use it, for the sake of some non-GNU makes.
compile: $(LOADDEFS) autoloads compile-first
	$(MAKE) $(MFLAGS) compile-main EMACS=$(EMACS)
	$(MAKE) $(MFLAGS) compile-last EMACS=$(EMACS)

## Doing this causes make install to dump another emacs.
#	$(MAKE) $(MFLAGS) update-elclist

# Compile all Lisp files.  This is like `compile' but compiles files
# unconditionally.  Some files don't actually get compiled because they
# set the local variable no-byte-compile.
compile-always: doit
	cd $(lisp); rm -f *.elc */*.elc */*/*.elc */*/*/*.elc
	$(MAKE) $(MFLAGS) compile EMACS=$(EMACS)

## In case any files are missing from ELCFILES.
compile-last:
	@wd=$(lisp); $(setwins); \
	els=`echo "$$wins " | sed -e 's|/\./|/|g' -e 's|/\. | |g' -e 's| |/*.el |g'`; \
	for el in $$els; do \
	  test -f $$el || continue; \
	  test -f $${el}c && continue; \
	  GREP_OPTIONS= grep 'no-byte-compile: t' $$el > /dev/null && continue; \
	  sel=`echo $$el | sed "s|^$(lisp)|\\$$(lisp)|"`; \
	  echo "Maintainer warning: $$sel missing from \$$ELCFILES?"; \
	  echo "Compiling $$el"; \
	  $(emacs) $(BYTE_COMPILE_EXTRA_FLAGS) -f batch-byte-compile $$el || exit 1; \
	done

compile-calc:
	for el in $(lisp)/calc/*.el; do \
	  echo Compiling $$el; \
	  $(emacs) $(BYTE_COMPILE_EXTRA_FLAGS) -f batch-byte-compile $$el || exit 1; \
	done

# Backup compiled Lisp files in elc.tar.gz.  If that file already
# exists, make a backup of it.

backup-compiled-files:
	-mv $(lisp)/elc.tar.gz $(lisp)/elc.tar.gz~
	-tar czf $(lisp)/elc.tar.gz $(lisp)/*.elc $(lisp)/*/*.elc $(lisp)/*/*/*.elc $(lisp)/*/*/*/*.elc

# Compile Lisp files, but save old compiled files first.

compile-after-backup: backup-compiled-files compile-always

# Recompile all Lisp files which are newer than their .elc files and compile
# new ones.
# This has the same effect as compile-main (followed up with compile-last,
# if ELCFILES is out of date).  recompile has some advantages:
# i) It is faster (on a single processor), since it only has to start
# Emacs once.  It was 33% faster on a test with a random 10% of the .el
# files needing recompilation.
# ii) The explicit cc-mode dependency.
# recompile's disadvantages are:
# i) Not parallelizable.
# ii) Compiling multiple files in the same instance of Emacs is wrong,
# since the environment of later files is affected by definitions in
# earlier ones.
recompile: doit $(LOADDEFS) compile-first $(lisp)/progmodes/cc-mode.elc
	$(emacs) --eval "(batch-byte-recompile-directory 0)" $(lisp)

# Update MH-E internal autoloads. These are not to be confused with
# the autoloads for the MH-E entry points, which are already in loaddefs.el.
MH_E_DIR = $(lisp)/mh-e
## MH_E_SRC avoids a circular dependency warning for mh-loaddefs.el.
MH_E_SRC = $(MH_E_DIR)/mh-acros.el $(MH_E_DIR)/mh-alias.el    \
	$(MH_E_DIR)/mh-buffers.el  $(MH_E_DIR)/mh-compat.el   \
	$(MH_E_DIR)/mh-comp.el     $(MH_E_DIR)/mh-e.el        \
	$(MH_E_DIR)/mh-folder.el   $(MH_E_DIR)/mh-funcs.el    \
	$(MH_E_DIR)/mh-gnus.el     $(MH_E_DIR)/mh-identity.el \
	$(MH_E_DIR)/mh-inc.el      $(MH_E_DIR)/mh-junk.el     \
	$(MH_E_DIR)/mh-letter.el   $(MH_E_DIR)/mh-limit.el    \
	$(MH_E_DIR)/mh-mime.el     $(MH_E_DIR)/mh-print.el    \
	$(MH_E_DIR)/mh-scan.el     $(MH_E_DIR)/mh-search.el   \
	$(MH_E_DIR)/mh-seq.el      $(MH_E_DIR)/mh-show.el     \
	$(MH_E_DIR)/mh-speed.el    $(MH_E_DIR)/mh-thread.el   \
	$(MH_E_DIR)/mh-tool-bar.el $(MH_E_DIR)/mh-utils.el    \
	$(MH_E_DIR)/mh-xface.el

mh-autoloads: $(MH_E_DIR)/mh-loaddefs.el
$(MH_E_DIR)/mh-loaddefs.el: $(MH_E_SRC)
	$(emacs) -l autoload \
	   --eval "(setq generate-autoload-cookie \";;;###mh-autoload\")" \
	   --eval "(setq generated-autoload-file \"$@\")" \
	   --eval "(setq make-backup-files nil)" \
	   -f batch-update-autoloads $(MH_E_DIR)

CAL_DIR = $(lisp)/calendar
## Those files that may contain internal calendar autoload cookies.
## Avoids circular dependency warning for *-loaddefs.el.
CAL_SRC = $(CAL_DIR)/cal-bahai.el $(CAL_DIR)/cal-china.el  \
	$(CAL_DIR)/cal-coptic.el  $(CAL_DIR)/cal-dst.el    \
	$(CAL_DIR)/cal-french.el  $(CAL_DIR)/cal-hebrew.el \
	$(CAL_DIR)/cal-html.el    $(CAL_DIR)/cal-islam.el  \
	$(CAL_DIR)/cal-iso.el     $(CAL_DIR)/cal-julian.el \
	$(CAL_DIR)/cal-mayan.el   $(CAL_DIR)/cal-menu.el   \
	$(CAL_DIR)/cal-move.el    $(CAL_DIR)/cal-persia.el \
	$(CAL_DIR)/cal-tex.el     $(CAL_DIR)/cal-x.el      \
	$(CAL_DIR)/calendar.el    $(CAL_DIR)/diary-lib.el  \
	$(CAL_DIR)/holidays.el    $(CAL_DIR)/lunar.el      \
	$(CAL_DIR)/solar.el

$(CAL_DIR)/cal-loaddefs.el: $(CAL_SRC)
	$(emacs) -l autoload \
	   --eval "(setq generate-autoload-cookie \";;;###cal-autoload\")" \
	   --eval "(setq generated-autoload-file \"$@\")" \
	   --eval "(setq make-backup-files nil)" \
	   -f batch-update-autoloads $(CAL_DIR)

$(CAL_DIR)/diary-loaddefs.el: $(CAL_SRC)
	$(emacs) -l autoload \
	   --eval "(setq generate-autoload-cookie \";;;###diary-autoload\")" \
	   --eval "(setq generated-autoload-file \"$@\")" \
	   --eval "(setq make-backup-files nil)" \
	   -f batch-update-autoloads $(CAL_DIR)

$(CAL_DIR)/hol-loaddefs.el: $(CAL_SRC)
	$(emacs) -l autoload \
	   --eval "(setq generate-autoload-cookie \";;;###holiday-autoload\")" \
	   --eval "(setq generated-autoload-file \"$@\")" \
	   --eval "(setq make-backup-files nil)" \
	   -f batch-update-autoloads $(CAL_DIR)

# Prepare a bootstrap in the lisp subdirectory.
#
# Build loaddefs.el to make sure it's up-to-date.  If it's not, that
# might lead to errors during the bootstrap because something fails to
# autoload as expected.  If there is no emacs binary, then we can't
# build autoloads yet.  In that case we have to use ldefs-boot.el.
# Bootstrap should always work with ldefs-boot.el.  Therefore,
# whenever a new autoload cookie gets added that is necessary during
# bootstrapping, ldefs-boot.el should be updated by overwriting it with
# an up-to-date copy of loaddefs.el that is uncorrupted by
# local changes.  (Because loaddefs.el is an automatically generated
# file, we don't want to store it in the source repository).

bootstrap-clean:
	cd $(lisp); rm -f *.elc */*.elc */*/*.elc */*/*/*.elc $(AUTOGENEL)

distclean:
	-rm -f ./Makefile

maintainer-clean: distclean bootstrap-clean

.PHONY: check-declare

check-declare:
	$(emacs) -l $(lisp)/emacs-lisp/check-declare \
	  --eval '(check-declare-directory "$(lisp)")'

# Dependencies

# CC Mode uses a compile time macro system which causes a compile time
# dependency in cc-*.elc files on the macros in other cc-*.el and the
# version string in cc-defs.el.
$(lisp)/progmodes/cc-align.elc $(lisp)/progmodes/cc-awk.elc\
 $(lisp)/progmodes/cc-cmds.elc $(lisp)/progmodes/cc-compat.elc\
 $(lisp)/progmodes/cc-engine.elc $(lisp)/progmodes/cc-fonts.elc\
 $(lisp)/progmodes/cc-langs.elc $(lisp)/progmodes/cc-menus.elc\
 $(lisp)/progmodes/cc-mode.elc $(lisp)/progmodes/cc-styles.elc\
 $(lisp)/progmodes/cc-vars.elc: \
   $(lisp)/progmodes/cc-bytecomp.elc $(lisp)/progmodes/cc-defs.elc

$(lisp)/progmodes/cc-align.elc: \
   $(lisp)/progmodes/cc-vars.elc $(lisp)/progmodes/cc-engine.elc

$(lisp)/progmodes/cc-cmds.elc: \
   $(lisp)/progmodes/cc-vars.elc $(lisp)/progmodes/cc-engine.elc

$(lisp)/progmodes/cc-compat.elc: \
   $(lisp)/progmodes/cc-vars.elc $(lisp)/progmodes/cc-styles.elc \
   $(lisp)/progmodes/cc-engine.elc

$(lisp)/progmodes/cc-defs.elc: $(lisp)/progmodes/cc-bytecomp.elc \
   $(lisp)/emacs-lisp/cl.elc $(lisp)/emacs-lisp/regexp-opt.elc

$(lisp)/progmodes/cc-engine.elc: $(lisp)/progmodes/cc-langs.elc \
   $(lisp)/progmodes/cc-vars.elc

$(lisp)/progmodes/cc-fonts.elc: $(lisp)/progmodes/cc-langs.elc \
   $(lisp)/progmodes/cc-vars.elc $(lisp)/progmodes/cc-engine.elc \
   $(lisp)/font-lock.elc

$(lisp)/progmodes/cc-langs.elc: $(lisp)/progmodes/cc-vars.elc \
   $(lisp)/emacs-lisp/cl.elc

$(lisp)/progmodes/cc-mode.elc: $(lisp)/progmodes/cc-langs.elc \
   $(lisp)/progmodes/cc-vars.elc $(lisp)/progmodes/cc-engine.elc \
   $(lisp)/progmodes/cc-styles.elc $(lisp)/progmodes/cc-cmds.elc \
   $(lisp)/progmodes/cc-align.elc $(lisp)/progmodes/cc-menus.elc

$(lisp)/progmodes/cc-styles.elc: $(lisp)/progmodes/cc-vars.elc \
   $(lisp)/progmodes/cc-align.elc

$(lisp)/progmodes/cc-vars.elc: $(lisp)/custom.elc $(lisp)/widget.elc

# MH-E dependencies, mainly to prevent failures with parallel
# compilation, due to race conditions between writing a given FOO.elc
# file and another file being compiled that says "(require FOO)",
# which causes Emacs to try to read FOO.elc.
$(MH_E_DIR)/mh-alias.elc $(MH_E_DIR)/mh-comp.elc $(MH_E_DIR)/mh-folder.elc\
 $(MH_E_DIR)/mh-funcs.elc $(MH_E_DIR)/mh-identity.elc $(MH_E_DIR)/mh-inc.elc\
 $(MH_E_DIR)/mh-junk.elc $(MH_E_DIR)/mh-letter.elc $(MH_E_DIR)/mh-limit.elc\
 $(MH_E_DIR)/mh-mime.elc $(MH_E_DIR)/mh-print.elc $(MH_E_DIR)/mh-scan.elc\
 $(MH_E_DIR)/mh-search.elc $(MH_E_DIR)/mh-seq.elc $(MH_E_DIR)/mh-show.elc\
 $(MH_E_DIR)/mh-speed.elc $(MH_E_DIR)/mh-thread.elc $(MH_E_DIR)/mh-tool-bar.elc\
 $(MH_E_DIR)/mh-utils.elc $(MH_E_DIR)/mh-xface.elc:\
   $(MH_E_DIR)/mh-e.elc

$(MH_E_DIR)/mh-alias.elc $(MH_E_DIR)/mh-e.elc $(MH_E_DIR)/mh-folder.elc\
 $(MH_E_DIR)/mh-inc.elc $(MH_E_DIR)/mh-junk.elc $(MH_E_DIR)/mh-limit.elc\
 $(MH_E_DIR)/mh-search.elc $(MH_E_DIR)/mh-seq.elc $(MH_E_DIR)/mh-speed.elc\
 $(MH_E_DIR)/mh-utils.elc $(MH_E_DIR)/mh-xface.elc:\
   $(lisp)/emacs-lisp/cl.elc

$(MH_E_DIR)/mh-comp.elc $(MH_E_DIR)/mh-folder.elc $(MH_E_DIR)/mh-funcs.elc\
 $(MH_E_DIR)/mh-junk.elc $(MH_E_DIR)/mh-limit.elc $(MH_E_DIR)/mh-print.elc\
 $(MH_E_DIR)/mh-seq.elc $(MH_E_DIR)/mh-show.elc $(MH_E_DIR)/mh-thread.elc:\
   $(MH_E_DIR)/mh-scan.elc

$(MH_E_DIR)/mh-folder.elc $(MH_E_DIR)/mh-letter.elc $(MH_E_DIR)/mh-mime.elc\
 $(MH_E_DIR)/mh-search.elc $(MH_E_DIR)/mh-show.elc $(MH_E_DIR)/mh-speed.elc:\
   $(lisp)/gnus/gnus-util.elc

$(MH_E_DIR)/mh-folder.elc $(MH_E_DIR)/mh-search.elc:\
   $(lisp)/progmodes/which-func.elc

$(MH_E_DIR)/mh-letter.elc $(MH_E_DIR)/mh-seq.elc $(MH_E_DIR)/mh-show.elc\
 $(MH_E_DIR)/mh-utils.elc:\
   $(lisp)/font-lock.elc

$(MH_E_DIR)/mh-alias.elc $(MH_E_DIR)/mh-show.elc: $(lisp)/net/goto-addr.elc

$(MH_E_DIR)/mh-comp.elc: $(lisp)/mail/sendmail.elc

$(MH_E_DIR)/mh-e.elc: $(MH_E_DIR)/mh-buffers.elc $(lisp)/gnus/gnus.elc \
   $(lisp)/cus-face.elc

$(MH_E_DIR)/mh-letter.elc: $(lisp)/gnus/mailcap.elc $(lisp)/gnus/mm-decode.elc \
   $(lisp)/gnus/mm-view.elc  $(lisp)/gnus/mml.elc $(lisp)/gnus/message.elc

$(MH_E_DIR)/mh-print.elc:  $(lisp)/ps-print.elc

$(MH_E_DIR)/mh-search.elc: $(lisp)/imenu.elc

$(MH_E_DIR)/mh-show.elc: $(lisp)/gnus/gnus-cite.elc

$(MH_E_DIR)/mh-speed.elc: $(lisp)/speedbar.elc $(lisp)/emacs-lisp/timer.elc

$(MH_E_DIR)/mh-tool-bar.elc: $(lisp)/tool-bar.elc

# Makefile ends here.
